home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / pgm_ing / bascrc / crctest.bas < prev    next >
Encoding:
BASIC Source File  |  1988-10-04  |  3.3 KB  |  87 lines

  1. ' CRCTEST.BAS
  2. ' Written by Lyle Jensen October 4, 1988.
  3. ' The CRC calculation is adapted from Peter Boswell's "Xmodem, CRC Xmodem,
  4. ' Wxmodem File Transfer Protocols" wherein he cites a paper written by
  5. ' Steven Satchell, "Test of CRC Routines for CRC-CCITT".
  6.  
  7. DECLARE SUB CRCCalc (Block$, CRC$)
  8. DEFINT A-Z
  9. DIM CRCTAB(0 TO 255)
  10. RANDOMIZE TIMER                        ' User value of TIMER as seed to
  11.                                        ' initialize random number generator.
  12. CLS
  13. GOSUB CRCInit
  14.  
  15. Block$ = ""
  16.  
  17. FOR I = 1 TO 128                       ' Generate a 128 byte string of
  18.    C = INT((122 - 48 + 1) * RND + 48)  ' random characters.
  19.    Block$ = Block$ + CHR$(C)
  20. NEXT I
  21.  
  22. PRINT "Test data block: ": PRINT Block$
  23. PRINT "Length: "; LEN(Block$)
  24.   
  25. Block$ = Block$ + STRING$(2, 0)
  26.  
  27. PRINT : PRINT "CRC Calculation"
  28. Time1! = TIMER
  29. CALL CRCCalc(Block$, CRC$)
  30. Time2! = TIMER
  31. PRINT "CRC:  High="; ASC(LEFT$(CRC$, 1)), "Low="; ASC(RIGHT$(CRC$, 1))
  32. PRINT "Elapsed time: "; Time2! - Time1!; "seconds"
  33.  
  34. END                                    ' End of program
  35.  
  36. CRCInit:
  37. FOR I% = 0 TO 255
  38.    READ CRCTAB(I%)
  39. NEXT I%
  40. RETURN
  41.  
  42. DATA 0,4129,8258,12387,16516,20645,24774,28903
  43. DATA -32504,-28375,-24246,-20117,-15988,-11859,-7730,-3601
  44. DATA 4657,528,12915,8786,21173,17044,29431,25302
  45. DATA -27847,-31976,-19589,-23718,-11331,-15460,-3073,-7202
  46. DATA 9314,13379,1056,5121,25830,29895,17572,21637
  47. DATA -23190,-19125,-31448,-27383,-6674,-2609,-14932,-10867
  48. DATA 13907,9842,5649,1584,30423,26358,22165,18100
  49. DATA -18597,-22662,-26855,-30920,-2081,-6146,-10339,-14404
  50. DATA 18628,22757,26758,30887,2112,6241,10242,14371
  51. DATA -13876,-9747,-5746,-1617,-30392,-26263,-22262,-18133
  52. DATA 23285,19156,31415,27286,6769,2640,14899,10770
  53. DATA -9219,-13348,-1089,-5218,-25735,-29864,-17605,-21734
  54. DATA 27814,31879,19684,23749,11298,15363,3168,7233
  55. DATA -4690,-625,-12820,-8755,-21206,-17141,-29336,-25271
  56. DATA 32407,28342,24277,20212,15891,11826,7761,3696
  57. DATA -97,-4162,-8227,-12292,-16613,-20678,-24743,-28808
  58. DATA -28280,-32343,-20022,-24085,-12020,-16083,-3762,-7825
  59. DATA 4224,161,12482,8419,20484,16421,28742,24679
  60. DATA -31815,-27752,-23557,-19494,-15555,-11492,-7297,-3234
  61. DATA 689,4752,8947,13010,16949,21012,25207,29270
  62. DATA -18966,-23093,-27224,-31351,-2706,-6833,-10964,-15091
  63. DATA 13538,9411,5280,1153,29798,25671,21540,17413
  64. DATA -22565,-18438,-30823,-26696,-6305,-2178,-14563,-10436
  65. DATA 9939,14066,1681,5808,26199,30326,17941,22068
  66. DATA -9908,-13971,-1778,-5841,-26168,-30231,-18038,-22101
  67. DATA 22596,18533,30726,26663,6336,2273,14466,10403
  68. DATA -13443,-9380,-5313,-1250,-29703,-25640,-21573,-17510
  69. DATA 19061,23124,27191,31254,2801,6864,10931,14994
  70. DATA -722,-4849,-8852,-12979,-16982,-21109,-25112,-29239
  71. DATA 31782,27655,23652,19525,15522,11395,7392,3265
  72. DATA -4321,-194,-12451,-8324,-20581,-16454,-28711,-24584
  73. DATA 28183,32310,20053,24180,11923,16050,3793,7920
  74.  
  75. SUB CRCCalc (V$, CRCX$)
  76.    SHARED CRCTAB()
  77.    CRCX$ = CHR$(0) + CHR$(0)                     ' Initialize to zero
  78.    FOR J = 1 TO 128
  79.       CRCH1 = ASC(LEFT$(CRCX$, 1))               ' CRC >> 8 AND 255
  80.       CRCL2 = CVI(CHR$(0) + RIGHT$(CRCX$, 1))    ' CRC << 8 AND 255
  81.       CRC1$ = MKI$(CRCTAB(CRCH1 XOR ASC(MID$(V$, J, 1))) XOR CRCL2)
  82.       CRCX$ = RIGHT$(CRC1$, 1) + LEFT$(CRC1$, 1) ' Set it back!
  83.    NEXT J
  84.  
  85. END SUB
  86.  
  87.